﻿#define _CRT_SECURE_NO_WARNINGS

//#include<iostream>
//using namespace std;
//class Example
//{
//public:
//	int _a;
//	//static int s = 0;//err 静态成员变量必须要在类外进行初始化
//	//正确方法：类里面声明
//	static int s;
//};
////类外面初始化，注意指定类域
//int Example::s = 0;//存放在静态区~
//int main()
//{
//	cout << sizeof(Example) << endl;
//	//访问公有静态成员变量
//	//1.指定类域
//	cout << Example::s << endl;
//	//2.使用对象
//	Example e1;
//	cout << e1.s << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Example
//{
//public:
//	static int Gets()//静态成员函数
//		//静态成员函数没有this指针~ 
//	{
//		//_a++;//err  //因为没有this指针，所以它不能访问非静态的
//		return _s;//可以访问其他的静态成员
//	}
//	void func()
//	{
//		_a++;
//		_s++;
//		//非静态的成员函数可以访问任意的静态成员变量和静态成员函数
//	}
//	int Geta()
//	{
//		return _a;
//	}
//private:
//	int _a = 0;//给缺省值，走初始化列表初始化
//	static int _s;
//};
////类外面初始化，注意指定类域
////static int Example::_s = 0;//err 这里是初始化，前面已经声明
//int Example::_s = 0;//存放在静态区~
//int main()
//{
//	Example e1;
//	cout << e1.Gets() << endl;
//	e1.func();
//	cout << "_a = " << e1.Geta()<< ",_s = " << e1.Gets() << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class sum
//{
//private:
//    static int _c;
//    static int _ret;
//public:
//    sum()
//    {
//        _c++;//从1~n
//        _ret += _c;//累加求和
//    }
//    static int Getr()
//    {
//        return _ret;
//    }
//};
//
////静态成员类外指定类域初始化
//int sum::_c = 0;
//int sum::_ret = 0;
//class Solution {
//public:
//    int Sum_Solution(int n) {
//        //static成员为所有对象共享
//        //产生n个对象就可以实现累加
//        //sum arr[n];//变长数组
//        sum* a = new sum[n];//也可以使用动态开辟
//        return sum::Getr();//可以不需要对象，直接指定类域调用函数
//    }
//};
//int main()
//{
//    Solution s1;
//    cout << s1.Sum_Solution(5) << endl;
//    return 0;
//}

//#include<iostream>
//using namespace std;
//class A
//{
//public:
//	A(int a = 0)
//		:_a(a)
//	{
//		cout << "A(int a)" << endl;
//	}
//	~A()
//	{
//		cout << "~A()" << endl;
//	}
//private:
//	int _a;
//};
//
//class Solution {
//public:
//	int Sum_Solution(int n) {
//		//...
//		return n;
//	}
//};
////匿名对象可以做类类型缺省参数
//void func(const A& aa = A())
//{
//
//}
//int main()
//{
//	A aa1;//有名对象 
//	A aa2(2);//有名对象 （生命周期是函数结束）
//	//A aa1();// 不能这么定义对象，编译器无法识别是⼀个函数声明，还是对象定义
//	
//	A();//匿名对象
//	A(1);// 我们可以这么定义匿名对象，匿名对象的特点不用取名
//	// 但是他的生命周期只有这一行，到下一行他就会自动调用析构函数
//	
//	A& ref1 = aa1;
//	//A& ref2 = A();//err //匿名对象具有常性，所以引用要加const
//	const A& ref2 = A();
//	//const引用也就延长了它的生命周期，匿名对象生命周期就会和引用走
//	
//	
//	// 匿名对象在这样场景下就很好用
//	Solution s1;
//	s1.Sum_Solution(10);
//	//上面的代码就可以只写一行
//	Solution().Sum_Solution(10);
//
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class A
//{
//private:
//	static int _a;
//	int _b = 1;
//public:
//	class C 
//		//C如果在A的private里面，就不可以在类外面访问
//	{
//	public:
//		void func(const A& a)
//		{
//			cout << _a << endl; //OK//可以直接访问A的静态变量（所有类对象共享）
//			cout << a._a << endl; //OK//也可以使用对象访问A的静态变量
//			//cout << _b << endl; //err  //_b是非静态变量，需要对象访问
//			cout << a._b << endl; //OK//使用对象访问A的非静态变量
//			// C默认就是A的友元
//			//可以访问A的成员变量
//		}
//		int _c;
//	};
//};
//int A::_a = 1;
//int main()
//{
//	cout << sizeof(A) << endl;
//	//内部类是⼀个独立的类,这里A大小为4
//	// （只计算成员变量_b,_c是static成员为所有对象共享)，与C的成员变量无关
//	//C c;//err
//	A::C c;//内部类受外部类类域限制和访问限定符限制
//	A aa;
//	c.func(aa);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//protected:
//    friend ostream& operator<<(ostream& out, const Date& d);
//public:
//    Date(int year, int month, int day);//构造函数
//    Date operator+(int n);
//    int GetMonthDay(int year, int month);
//private:
//    int _year;
//    int _month;
//    int _day;
//};
//
//Date::Date(int year, int month, int day)
//{
//    _day = day;
//    _month = month;
//    _year = year;
//}
//ostream& operator<<(ostream& out, const Date& d)
//{
//    if (d._month < 10 && d._day < 10)
//        out << d._year << "-" << 0 << d._month << "-" << 0 << d._day;
//    else if (d._month >= 10 && d._day < 10)
//        out << d._year << "-" << d._month << "-" << 0 << d._day;
//    else if (d._month < 10 && d._day >= 10)
//        out << d._year << "-" << 0 << d._month << "-" << d._day;
//    else
//        out << d._year << "-" << d._month << "-" << d._day;
//    return out;
//}
//Date Date::operator+(int n)
//{
//    int year = _year;
//    int month = _month;
//    int day = _day;
//    int days = GetMonthDay(year, month);
//
//    while (day + n > days)
//    {
//        month++;
//        if (month > 12)
//        {
//            year++;
//            month = 1;
//        }
//        n -= days;
//        days = GetMonthDay(year, month);
//    }
//    day += n;
//    return Date(year, month, day);
//}
//
//int Date::GetMonthDay(int year, int month)
//{
//    static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//    int day = days[month];
//    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
//    {
//        day += 1;
//    }
//    return day;
//}

//int main()
//{
//
//    int count = 0;
//    int year = 0, month = 0, day = 0;
//    int n = 0;
//    cin >> count;
//    for (int cur = 0; cur < count; cur++)
//    {
//        cin >> year >> month >> day >> n;
//        Date d(year, month, day);
//        Date d1 = d + n;
//        cout << d1 << endl;
//    }
//
//
//    return 0;
//}

#include <iostream>
using namespace std;
int getDay(int y, int m)
{
    static int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    if ((m == 2) && ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)))
    {
        arr[2] = 29;
    }
    else {
        arr[2] = 28;
    }
    return arr[m];
}
class Date
{
public:
    Date(int y, int m, int d)//构造函数
    {
        _year = y;
        _month = m;
        _day = d;
    }
    Date& operator-=(int n)
    {
        _day -= n;
        while (_day <= 0 )
        {

            _month--;
            if (_month == 0)
            {
                _year--;
                _month = 12;
            }
            _day += getDay(_year, _month);
        }
        return *this;
    }
    Date& operator+=(int n)
    {
        if (n < 0)
        {
            return *this-=(-n);
        }
        else
        {
            int days = getDay(_year, _month);
            while (n + _day > days)
            {

                /*_month++;
                if (_month > 12)
                {
                    _year++;
                    _month = 1;
                    n -= getDay(_year, 12);
                }
                else
                {
                    n -= getDay(_year, _month - 1);
                }*/
                _month++;
                if (_month > 12)
                {
                    _year++;
                    _month = 1;
                }
                n -= days;
                days = getDay(_year, _month);
            }
            _day = _day + n;
            return *this;
        }
    }
    void Print()
    {
        printf("%04d-%02d-%02d\n", _year, _month, _day);
    }
    friend ostream& operator<<(ostream& out, const Date& d);
private:
    int _year;
    int _month;
    int _day;
};
ostream& operator<<(ostream& out, const Date& d)
{
    if (d._month < 10 && d._day < 10)
        out << d._year << "-" << 0 << d._month << "-" << 0 << d._day;
    else if (d._month >= 10 && d._day < 10)
        out << d._year << "-" << d._month << "-" << 0 << d._day;
    else if (d._month < 10 && d._day >= 10)
        out << d._year << "-" << 0 << d._month << "-" << d._day;
    else
        out << d._year << "-" << d._month << "-" << d._day;
    return out;
}
int main() {
    int n = 0;
    cin >> n;
    int y, m, d, c;
    while (n)
    {
        cin >> y >> m >> d >> c;
        Date d1(y, m, d);
        d1 += c;
        //cout << d1 << endl;
        d1.Print();
        n--;
    }
}



//#include<iostream>
//
//using namespace std;
//
//int main()
//{
//    int n;
//    while (cin >> n)
//    {
//        for (int i = 0; i < n; i++)
//        {
//            int y, m, d, num;
//            int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//            cin >> y >> m >> d >> num;
//            d += num;
//            while (d > days[m - 1])
//            {
//                if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
//                    days[1] = 29;
//                else
//                    days[1] = 28;
//                d -= days[m - 1];
//                if (d == 0)
//                    d = 1;
//                m++;
//                if (m == 13)
//                {
//                    y++;
//                    m = 1;
//                }
//            }
//            printf("%4d-%02d-%02d\n", y, m, d);
//        }
//    }
//    return 0;
//}
//
